<?php

 class CartTool{
     private static $ins = null;
     private $items = array();
     public $sign = 0;

     protected function __construct(){
         $this->sign = mt_rand(1,10000);
     }


     //获取实列
     protected static function getIns(){
         if(!(self::$ins instanceof self)){
             self::$ins = new self();
         }
         return self::$ins;
     }

     //把购物车的单列对象放到session里
     public static function getCart(){
         if(!isset($_SESSION['cart']) || !($_SESSION['cart'] instanceof self)){
             $_SESSION['cart'] = self::getIns();
         }
         return $_SESSION['cart'];
     }

     /**
      * 添加购物车商品
      * @param $id  商品ID
      * @param $name  商品名称
      * @param $price  价格
      * @param $num  数量
      */
     public function addItem($id,$name,$price,$num){
         if($this->hasItem($id)){
             $this->incNum($id,$num);
             return ;
         }
         $item = [];
         $item['name'] = $name;
         $item['price'] = $price;
         $item['num'] = $num;
         $this->items[$id] = $item;
     }

     /**
      * 修改购物车中商品的数量
      * @param int $id 商品主键
      * @param int $num 某个商品修改后的数量，即直接把某商品的数量改为 $num
      */
     public function modNum($id,$num=1){
         if(!$this->hasItem[$id]){
            return false;
         }
         $this->items[$id]['num'] = $num;

     }

     /**
      * 修改购物车 商品数量 增一
      */
     public function incNum($id,$num=1){
         if($this->hasItem($id)){
             return $this->items[$id]['num'] += $num;
         }
     }

     /**
      * 修改购物车 商品数量 减一
      */
     public function decNum($id,$num=1){
         if($this->hasItem($id)){
            $oldNum = $this->items[$id]['num'] -= $num;
         }

         if($this->items[$id]['num'] < 1){
              $this->deleteItem($id);
         };

         return true;
     }

     //判断某个商品是否存在
     public function hasItem($id){
         return array_key_exists($id,$this->items);
     }

     /**
      * 删除商品
      */
     public function deleteItem($id){
         unset($this->items[$id]);
     }


     /**
      * 查询购物车中商品种类
      */
     public function getCnt(){
          return count($this->items);
     }

     /**
      * 查询购物车中商品的个数
      */
     public function getNum(){
         if($this->getCnt() == 0){
             return 0;
         }
         $sum = 0;
         foreach($this->items as $item){
             $sum += $item['num'];
         }
         return $sum;
     }

     /**
      * 查询购物车中商品的总金额
      */
     public function getPrice(){
         if($this->getCnt() == 0){
             return 0;
         }
         $price = 0;
         foreach($this->items as $item){
             $price += $item['num'] * $item['price'];
         }
         return $price;
     }


     /**
      * 返回购物车中的所有商品
      */
     public function all(){
         return $this->items;
     }


     /**
      * 清空购物车
      */
     public function clear(){
         $this->items = array();
     }

 }


  $cart = CartTool::getCart();
//print_r($cart);



//if(!isset($_GET['test'])){
//         $_GET['test'] = '';
//     }
//
//     if($_GET['test'] == 'add'){
//         $cart->addItem(2,'王八',23.4,2);
//         echo 'add ok';
//     }else if($_GET['test'] == 'clear'){
//         $cart->clear();
//         echo 'clear ok';
//     }else if($_GET['test'] == 'show'){
//         print_r($cart->all());
//         echo '<br />';
//         echo '共',$cart->getCnt(),'种',$cart->getNum(),'个商品<br />';
//         echo '共', $cart->getPrice(),'钱💰';
//     }